public class Num1144 {
    //给你一个整数数组nums，每次 操作会从中选择一个元素并 将该元素的值减少1。
    //如果符合下列情况之一，则数组A就是 锯齿数组：
    //每个偶数索引对应的元素都大于相邻的元素，即A[0] > A[1] < A[2] > A[3] < A[4] > ...
    //或者，每个奇数索引对应的元素都大于相邻的元素，即A[0] < A[1] > A[2] < A[3] > A[4] < ...
    //返回将数组nums转换为锯齿数组所需的最小操作次数。
    public int movesToMakeZigzag(int[] nums) {
        int sum1 = 0;
        int sum2 = 0;
        int len = nums.length;
        if (len == 1) return 0;
        //所有奇数位置小
        for (int i = 0; i < len; i += 2) {
            if (i == 0) {
                if (nums[i] >= nums[i + 1]) sum1 += nums[i] - nums[i + 1] + 1;
            }else if (i == len - 1) {
                if (nums[i] >= nums[i - 1]) sum1 += nums[i] - nums[i - 1] + 1;
            }else {
                int min = nums[i - 1] >= nums[i + 1] ? nums[ i + 1] : nums[i - 1];
                if (nums[i] >= min) sum1 += nums[i] - min + 1;
            }
        }
        //所有偶数位置小
        for (int i = 1; i < len; i += 2) {
            if (i == len - 1) {
                if (nums[i] >= nums[i - 1]) sum2 += nums[i] - nums[i - 1] + 1;
            }else {
                int min = nums[i - 1] >= nums[i + 1] ? nums[ i + 1] : nums[i - 1];
                if (nums[i] >= min) sum2 += nums[i] - min + 1;
            }
        }
        return sum1 >= sum2 ? sum2 : sum1;
    }
}
